import type { DefineConfig } from '../typing';

import { existsSync } from 'node:fs';
import { join } from 'node:path';

import { defineApplicationConfig } from './application';
import { defineLibraryConfig } from './library';

export * from './application';
export * from './library';

function defineConfig(userConfigPromise?: DefineConfig, type: 'application' | 'auto' | 'library' = 'auto') {
    let projectType = type;

    // 根据包是否存在 index.html,自动判断类型
    if (projectType === 'auto') {
        const htmlPath = join(process.cwd(), 'index.html');
        projectType = existsSync(htmlPath) ? 'application' : 'library';
    }

    switch (projectType) {
        case 'application': {
            return defineApplicationConfig(userConfigPromise);
        }
        case 'library': {
            return defineLibraryConfig(userConfigPromise);
        }
        default: {
            throw new Error(`Unsupported project type: ${projectType}`);
        }
    }
}

export { defineConfig };
